﻿Imports PTIC_Util

#Region "TableBDD_Excel"
''' <summary>
''' Table Excel
''' </summary>
''' <remarks></remarks>
<Serializable()> Public Class tableBDD_Excel
    Inherits tableBDD

    Public schemaBDD As DataTable
    Public resultatReq As DataTable

#Region "Création d'une instance"

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New(ByVal nomTraitement As String, _
                   ByVal nomFichier As Cla_NomFichier, _
                   ByVal connection As OleDb.OleDbConnection)

        MyBase.New(nomTraitement, nomFichier, typeBase.EXCEL)

        'Initialisation de la connection (gérée via l'univers BDD)
        Me.Connection = connection

        'Initialisation de la liste des tables disponibles
        MAJTablesDispoBDD()

        'Initialisation du nom de la table à extraire (induite, dans le cas du support SAS, par le nom
        'complet du fichier)
        'nomTable = nomFichier.nomSansExt

    End Sub

#End Region

#Region "Traitement de l'évènement changement de nom de la table"
    Protected Sub onNomTableDansBDDChanging(ByVal sender As Object, ByVal e As PTIC_Util.PropertyChangeEventArgs(Of String)) Handles Me.NomTableDansBDDChanging
        e.NewValue = "[" & e.NewValue & "$" & "]"
    End Sub
    Protected Sub onNomTableDansBDDChanged(ByVal sender As Object, ByVal e As PTIC_Util.PropertyChangeEventArgs(Of String)) Handles Me.NomTableDansBDDChanged
        MAJMetaDonnees()
        MAJListesChampsFromMetaDonnees()
        MAJStats()
        invalideAll()
    End Sub
#End Region

#Region "Méthodes de classe protégées"

    ''' <summary>
    ''' Mise à jour de la table des Méta-données
    ''' </summary>
    ''' <remarks></remarks>
    Protected Overrides Sub MAJMetaDonnees()
        'Crétion d'une table qui contient :
        '   - une ligne par champs de la table d'encours
        '   - les colonnes : nom du champs / type du champs / longueur du champs / format du champs

        Dim da1 As OleDb.OleDbDataAdapter, result As DataTable
        Dim schemaTbleFromFillSchema As New DataTable()

        Try

            Connection.Open()

            'Récupération des caractéristiques des colonnes à l'aide de la méthode fillSchema
            da1 = New OleDb.OleDbDataAdapter("SELECT * FROM " & Me.NomTableDansBDD & ";", Connection)
            da1.FillSchema(schemaTbleFromFillSchema, SchemaType.Source)

            'Récupération des caractéristiques des colonnes à l'aide de la méthode getSchema
            '(ici, les data_type sont codés)
            ''''schemaTbleFromGetSchema = _connection.GetSchema("Columns", New String() {Nothing, Nothing, _sNomTable, Nothing})
            'schemaTbleFromGetSchema.TableName = "SchemaColonnesEncours"

            Connection.Close()

            'A partir des deux tables récupérées ci-dessus, alimentation du schema final

            result = New DataTable("MetaDonneesTbleAExtraire")
            result.Columns.Add("COLUMN_NAME", GetType(System.String))
            result.Columns.Add("DATA_TYPE_FULLNAME", GetType(System.String))
            result.Columns.Add("COLUMN_LENGTH", GetType(System.Int32))
            result.Columns.Add("FORMAT_NAME", GetType(System.String))

            For Each c As DataColumn In schemaTbleFromFillSchema.Columns
                'Rechercher le nom du format dans la deuxième base
                result.Rows.Add(c.ColumnName, c.DataType.FullName, c.MaxLength, c.DataType.FullName)
            Next

            TableMetaDonnees = result

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>
    Protected Overrides Sub MAJTablesDispoBDD()
        ListTablesDispoBDD.Clear()
        'Parcourir tous les onglets du fichier Excel et ajouter leur nom dans la collection
        Connection.Open()
        Dim feuilleExcel As DataTable = Connection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, _
                    New Object() {Nothing, Nothing, Nothing, "TABLE"})
        Connection.Close()
        Dim r = From row As DataRow In feuilleExcel.Rows
                Select row(2)
        Dim lOnglet As IEnumerable = r.AsEnumerable
        For Each el In lOnglet
            ListTablesDispoBDD.Add(el.ToString)
        Next
        resultatReq = feuilleExcel
    End Sub

#End Region

End Class
#End Region
